import java.util.ArrayList;

import junit.framework.TestCase;
import navalgo3.Modelo.Disparo;
import navalgo3.Modelo.Lancha;
import navalgo3.Modelo.Mina;
import navalgo3.Modelo.MinaDobleConRetardo;
import navalgo3.Modelo.MinaPorContacto;
import navalgo3.Modelo.Norte;
import navalgo3.Modelo.Posicion;
import navalgo3.Modelo.Tablero;
import navalgo3.Modelo.Turno;


public class TurnoTests extends TestCase {
	
	public void testPasanTurnosYExplotanLasMinas(){
		Mina unaMinaConRetardo = new MinaDobleConRetardo(new Posicion(3,3));
		Tablero miTablero = new Tablero();
		miTablero.colocarMina(unaMinaConRetardo);
		Turno unTurno = new Turno();
		unTurno.pasarTurno(miTablero);
		assertFalse (unaMinaConRetardo.exploto());
		unTurno.pasarTurno(miTablero);
		assertFalse (unaMinaConRetardo.exploto());
		unTurno.pasarTurno(miTablero);
		assertTrue (unaMinaConRetardo.exploto());
	}
	
	public void testPasanTurnosLaNaveSeMueveYExplotaMinaPorContacto(){
		Mina unaMinaPorContacto = new MinaPorContacto (new Posicion (5,5));
		ArrayList<Posicion> posicionDeLancha = new ArrayList<Posicion>();
		posicionDeLancha.add(new Posicion(5,6));
		posicionDeLancha.add(new Posicion(5,7));
		Lancha unaLancha = new Lancha (posicionDeLancha, new Norte());
		Tablero miTablero = new Tablero();
		miTablero.colocarMina(unaMinaPorContacto);
		miTablero.colocarNave(unaLancha);
		Turno unTurno = new Turno ();
		unTurno.pasarTurno(miTablero);
		assertTrue (unaLancha.tieneDanioEn(new Posicion(5,5)));
	}
	
	public void testPasanTurnosLaNaveSeMueveYExplotaMinaPorContactoYSeDestruyeConDisparo(){
		Mina unaMinaPorContacto = new MinaPorContacto (new Posicion (5,5));
		ArrayList<Posicion> posicionDeLancha = new ArrayList<Posicion>();
		posicionDeLancha.add(new Posicion(5,6));
		posicionDeLancha.add(new Posicion(5,7));
		Lancha unaLancha = new Lancha (posicionDeLancha, new Norte());
		Tablero miTablero = new Tablero();
		miTablero.colocarMina(unaMinaPorContacto);
		miTablero.colocarNave(unaLancha);
		Turno unTurno = new Turno ();
		unTurno.pasarTurno(miTablero);
		assertTrue (unaLancha.tieneDanioEn(new Posicion(5,5)));
		miTablero.colocarDisparo(new Disparo (new Posicion(5,5)));
		unTurno.pasarTurno(miTablero);
		assertTrue (unaLancha.estaDestruida());
	}
}
